"""
Streamlit UI 应用主模块
整合所有 UI 组件，提供完整的用户界面
"""

from datetime import datetime

import streamlit as st

from configs.global_config import global_config

from .api_client import APIClient
from .face_feature_ui import FaceFeatureUI
from .face_matching_ui import FaceMatchingUI
from .utils import apply_custom_css

global_config.initialize()
print(global_config.raw_config)

# 配置API端点
API_BASE_URL = f"http://{global_config.get('server.host', 'localhost')}:{global_config.get('server.port', 5555)}"

class StreamlitApp:
    """Streamlit 应用类，整合所有 UI 组件"""

    def __init__(self, api_base_url: str = API_BASE_URL):
        """
        初始化 Streamlit 应用

        Args:
            api_base_url: API 服务的基础 URL
        """
        # 配置页面
        st.set_page_config(
            page_title="媒体信息处理服务",
            page_icon="🎭",
            layout="wide",
            initial_sidebar_state="expanded",
        )

        # 应用自定义 CSS
        apply_custom_css()

        # 创建 API 客户端
        self.api_client = APIClient(api_base_url)

        # 创建 UI 组件
        self.face_feature_ui = FaceFeatureUI(self.api_client)
        self.face_matching_ui = FaceMatchingUI(self.api_client)

        # 导航选项
        self.nav_options = [
            "首页",
            "人脸特征提取",
            "人脸匹配",
            "语音识别",
            "视频处理",
            "系统状态",
        ]

    def run(self):
        """运行 Streamlit 应用"""
        # 侧边栏导航
        self._render_sidebar()

        # 获取当前选择的导航项
        selected_nav = st.session_state.get("selected_nav", "首页")

        # 根据导航选择渲染对应页面
        if selected_nav == "首页":
            self._render_home()
        elif selected_nav == "人脸特征提取":
            self.face_feature_ui.render()
        elif selected_nav == "人脸匹配":
            self.face_matching_ui.render()
        elif selected_nav == "语音识别":
            #self.voice_recognition_ui.render()
            pass
        elif selected_nav == "视频处理":
            #self.video_processing_ui.render()
            pass
        elif selected_nav == "系统状态":
            #self.system_status_ui.render()
            pass

        # 添加页脚
        self._render_footer()

    def _render_sidebar(self):
        """渲染侧边栏"""
        st.sidebar.markdown(
            '<div class="main-header">媒体信息处理服务</div>', unsafe_allow_html=True
        )

        # 使用文本替代图片，避免图片路径问题
        st.sidebar.markdown("### 🖥️ 媒体处理平台")

        # 获取健康状态
        health_status = self.api_client.get_health_status()
        if health_status["code"] == 200 and health_status["data"]["status"] == "UP":
            st.sidebar.success("✅ 服务状态: 正常")
        else:
            st.sidebar.error("❌ 服务状态: 异常")

        # 导航菜单
        selected_nav = st.sidebar.radio("功能导航", self.nav_options)

        # 更新会话状态
        if (
            "selected_nav" not in st.session_state
            or st.session_state["selected_nav"] != selected_nav
        ):
            st.session_state["selected_nav"] = selected_nav

        # 页脚
        st.sidebar.markdown("---")
        st.sidebar.markdown(
            f"<div class='info-text'>版本: {health_status.get('data', {}).get('version', '未知')}<br>"
            f"© {datetime.now().year} 媒体信息处理服务</div>",
            unsafe_allow_html=True,
        )

    def _render_home(self):
        """渲染首页"""
        st.markdown(
            '<div class="main-header">欢迎使用媒体信息处理服务</div>',
            unsafe_allow_html=True,
        )

        col1, col2, col3 = st.columns(3)

        with col1:
            st.markdown('<div class="card">', unsafe_allow_html=True)
            st.markdown("### 🎭 人脸处理")
            st.markdown("提取人脸特征、人脸匹配等功能")
            if st.button("前往人脸特征提取", key="goto_face_feature"):
                st.session_state["selected_nav"] = "人脸特征提取"
                st.rerun()
            st.markdown("</div>", unsafe_allow_html=True)

        with col2:
            st.markdown('<div class="card">', unsafe_allow_html=True)
            st.markdown("### 🔊 语音识别")
            st.markdown("将语音转换为文本，支持多种语言")
            if st.button("前往语音识别", key="goto_speech"):
                st.session_state["selected_nav"] = "语音识别"
                st.rerun()
            st.markdown("</div>", unsafe_allow_html=True)

        with col3:
            st.markdown('<div class="card">', unsafe_allow_html=True)
            st.markdown("### 🎬 视频处理")
            st.markdown("视频帧提取、视频文字识别等功能")
            if st.button("前往视频处理", key="goto_video"):
                st.session_state["selected_nav"] = "视频处理"
                st.rerun()
            st.markdown("</div>", unsafe_allow_html=True)

        st.markdown("---")
        st.markdown('<div class="sub-header">快速开始</div>', unsafe_allow_html=True)

        st.markdown("""
        1. 从左侧导航栏选择需要使用的功能
        2. 上传相应的媒体文件（图片、音频或视频）
        3. 设置所需参数
        4. 点击执行按钮，查看处理结果
        
        所有功能均通过API调用后端服务，确保后端服务正常运行。
        """)

    def _render_footer(self):
        """渲染页脚"""
        st.markdown("---")
        st.markdown(
            """
            <div style="text-align: center; color: #888;">
                媒体信息处理服务 WebUI | 基于 Streamlit 构建
            </div>
            """,
            unsafe_allow_html=True,
        )
